Crate derive_into_owned [] [src]

derive_into_owned

This crate supports deriving two different methods (not traits):

  • IntoOwned
  • Borrowed

These were first created to help out with types generated by quick_protobuf which generates structs with Cow fields. It is entirely possible that this crate is not needed at all and that there exists better alternatives to what this crate aims to support.

Definitions, naming

"Cow-alike" is used to mean a type that:

  • has a lifetime specifier, like Foo<'a>
  • has an implementation for fn into_owned(self) -> Foo<'static>

This is a bit of a bad name as Cow itself has a different kind of into_owned which returns the owned version of the generic type parameter. I am open to suggestions for both "Cow-alike" and into_owned.

IntoOwned

#[derive(IntoOwned)] implements a method fn into_owned(self) -> Foo<'static> for type Foo<'a> which contains Cow or "Cow-alike" fields. The method returns a version with 'static lifetime which means the value owns all of it's data. This is useful if you are for example, working with tokio-rs which currently requires types to be 'static.

Borrowed

#[derive(Borrowed)] implements a method fn borrowed<'b>(&'b self) -> Foo<'b> for type Foo<'a>. This is useful in case you need to transform the value into another type using std conversions like From, but you don't want to clone the data in the process. Note that the all the fields that are not Cow or "Cow-alike" are just cloned, and new vectors are collected, so this yields savings only when you manage to save big chunks of memory.

Limitations

Currently only the types I needed are supported and this might be a rather limited set of functionality. If you find that this does not work in your case please file an issue at project repository.